package ali;

import java.util.Stack;

/**
 * 思路；
 * 维护两个栈：
 * 	第一个栈支持插入操作
 * 	第二个栈支持删除操作
 *
 * 根据栈先进后出的特性，我们每次往第一个栈里插入元素后，第一个栈的底部元素是最后插入的元素
 * 为了维护队列先进先出的特性，用第二个栈维护待删除的元素，在执行删除操作的时候我们首先看下第二个栈是否为空
 * 如果为空，将第一个栈里的元素一个个弹出插入到第二个栈里，这样第二个栈里元素的顺序就是待删除的元素的顺序
 * 要执行删除操作的时候我们直接弹出第二个栈的元素返回即可
 *
 * 参考链接：https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/solution/mian-shi-ti-09-yong-liang-ge-zhan-shi-xian-dui-l-3/
 *
 *  @author wxh
 */
public class CQueue {

	private Stack<Integer> stack1;
	private Stack<Integer> stack2;


	public CQueue() {
		stack1 = new Stack();
		stack2 = new Stack();
	}

	public void appendTail(int value) {
		stack1.push(value);
	}

	public int deleteHead() {
		// 如果第二个栈为空：将第一个栈里的元素一个个弹出插入到第二个栈里
		if (stack2.empty()) {
			while (!stack1.empty()) {
				stack2.push(stack1.pop()); // 从栈1到栈2
			}
		}
		if (stack2.empty()) {
			return -1;
		}
		return stack2.pop();
	}
}